<template>
  <div style="margin-top: 16px">
    <a-form-item label="脚本格式">
      <a-input
          v-model="scriptTaskForm.scriptFormat"
          allow-clear
          @input="updateElementTask()"
          @change="updateElementTask()"
      />
    </a-form-item>
    <a-form-item label="脚本类型">
      <a-select v-model="scriptTaskForm.scriptType">
        <a-select-option value="inline">
          内联脚本
        </a-select-option>
        <a-select-option value="external">
          外部资源
        </a-select-option>
      </a-select>
    </a-form-item>
    <a-form-item
        v-show="scriptTaskForm.scriptType === 'inline'"
        label="脚本"
    >
      <a-input
          v-model="scriptTaskForm.script"
          type="textarea"
          :autosize="{ minRows: 2, maxRows: 4 }"
          allow-clear
          @input="updateElementTask()"
          @change="updateElementTask()"
      />
    </a-form-item>
    <a-form-item
        v-show="scriptTaskForm.scriptType === 'external'"
        label="资源地址"
    >
      <a-input
          v-model="scriptTaskForm.resource"
          allow-clear
          @input="updateElementTask()"
          @change="updateElementTask()"
      />
    </a-form-item>
    <a-form-item label="结果变量">
      <a-input
          v-model="scriptTaskForm.resultVariable"
          allow-clear
          @input="updateElementTask()"
          @change="updateElementTask()"
      />
    </a-form-item>
  </div>
</template>

<script>
export default {
  name: 'ScriptTask',
  props: {
    id: String,
    type: String
  },
  data() {
    return {
      defaultTaskForm: {
        scriptFormat: '',
        script: '',
        resource: '',
        resultVariable: ''
      },
      scriptTaskForm: {}
    }
  },
  watch: {
    id: {
      immediate: true,
      handler() {
        this.bpmnElement = window.bpmnInstances.bpmnElement
        this.$nextTick(() => this.resetTaskForm())
      }
    }
  },
  beforeDestroy() {
    this.bpmnElement = null
  },
  methods: {
    resetTaskForm() {
      for (const key in this.defaultTaskForm) {
        const value =
          this.bpmnElement?.businessObject[key] || this.defaultTaskForm[key]
        this.$set(this.scriptTaskForm, key, value)
      }
      this.$set(
        this.scriptTaskForm,
        'scriptType',
        this.scriptTaskForm.script ? 'inline' : 'external'
      )
    },
    updateElementTask() {
      const taskAttr = Object.create(null)
      taskAttr.scriptFormat = this.scriptTaskForm.scriptFormat || null
      taskAttr.resultVariable = this.scriptTaskForm.resultVariable || null
      if (this.scriptTaskForm.scriptType === 'inline') {
        taskAttr.script = this.scriptTaskForm.script || null
        taskAttr.resource = null
      } else {
        taskAttr.resource = this.scriptTaskForm.resource || null
        taskAttr.script = null
      }
      window.bpmnInstances.modeling.updateProperties(
        this.bpmnElement,
        taskAttr
      )
    }
  }
}
</script>
